Hi
I copied and pasted the above codes, except main: the iprint events part ,
Commenting out those parts that dnt work before i test next part , to rule out one cause and found two
Problem with connection event , crashes server when 1st round ends
Problem with intermission event , crashes server when 2nd round ends
Restart server and changed maps before players join
Nothing shows up in logs , no reborn errors or anything
Full script below
Exec from dmprecache.scr , Tried exec script before and after level waittill spawn but no such luck
Code:
main:
//local.result = registerev "spawn" global/custom/weapons.scr::spawn
local.result = registerev "connected" global/custom/weapons.scr::connected
local.result = registerev "intermission" global/custom/weapons.scr::intermission
level.mef_pstatecallbacks.spawned = global/custom/weapons.scr::spawn
thread get_cvars
thread weapon_message
teamswitchdelay .2
waitthread Decompile;
level waittill spawn;
end;
////////////////////////////////////////////
GlobVar:
level.valSep = "," //"¶" //seperator character to seperate the values
level.entrSep = ";" //"¦" //seperator character to seperate (player) entries
end;
///////////////////////////////////////////////////
Connected local.player:
local.player waitthread GetSwapDataForClient;
end;
///////////////////////////////////////////////////
Intermission local.type:
waitthread Compile;
end;
///////////////////////////////////////////////////
Compile:
println "COMPILE"
local.cvarStr = "";
for (local.i = 1; local.i <= $player.size; local.i++) {
local.player = $player[local.i];
// Catches all NILs
if (local.player.swap != "1") {
local.player.swap = "0"
}
/// Compilation phase.. no need to cast to string :)
// Add player's name value seperator player's ip value seperator player's property entry seperator
local.cvarStr += ((netname local.player) + (level.valSep) + (getip local.player) + (level.valSep) + (local.player.swap) + (level.entrSep));
}
setcvar "sessionSwapData" local.cvarStr;
end;
///////////////////////////////////////////////////
Decompile:
println "DECOMPILE"
// Load compilation variables
waitthread GlobVar;
// Break 'sessionSwapData' string into strings of the entries.
level.sessionSwapData = waitthread Split (getcvar("sessionSwapData")) level.entrSep;
// No longer needed;
setcvar "sessionSwapData" "";
// Save initial size (We're going to remove elements without reconcatenating
// the array later on to save time and resources).
level.sessionSwapDataSize = level.sessionSwapData.size;
// Array of strings isn't empty (this means the cvar "sessionSwapData" wasn't empty)
if (0 < level.sessionSwapDataSize) {
// Split values as well and create a two-dimensional array.
for (local.i = 1; local.i <= level.sessionSwapDataSize; local.i++) {
// Now split entry string into its 3 value strings. In our compile phase,
// each value had a fixed position. This is maintained. :)
level.sessionSwapData[local.i] = waitthread Split level.sessionSwapData[local.i] level.valSep;
}
}
end;
///////////////////////////////////////////////////
GetSwapDataForClient:
local.result = 0;
for (local.i = 1; local.i <= level.sessionSwapDataSize; local.i++) {
// Element is not inexistent and is an array which
// contains a valid amount of elements itself.
if (level.sessionSwapData[local.i].size == 3) {
if ((getip self) == level.sessionSwapData[local.i][2]) {
if ((netname self) == level.sessionSwapData[local.i][1]) {
// Player was found!
// He did not disconnect during mapchange...
self.swap = level.sessionSwapData[local.i][3];
// No need to keep this set of data anymore (frees memory and
// makes this algorithm run faster next time).
level.sessionSwapData[local.i] = NIL;
// exit
local.result = 1;
break;
}
}
}
}
end local.result;
///////////////////////////////////////////////////
Split local.string local.spacer:
local.strSize = local.string.size;
// HACK! Efficiently prevents console from producing an
// 'out-of-range' error at the second spacer check.
local.string += local.spacer;
local.word = 1;
local.result[local.word] = "";
for (local.i = 0; local.i < local.strSize; local.i++) {
if (local.spacer == local.string[local.i]) {
if (local.string[(local.i + 1)] != local.spacer) {
if(local.result[local.word] != "") {
local.word++;
local.result[local.word] = "";
}
}
continue;
}
local.result[local.word] += local.string[local.i];
}
end local.result;
//////////////////////////////
spawn local.player:
waitthread weapon_check local.player
thread weapon_swap local.player
end
////////////////////////////////////////////////////////////
////////////// Weapon Check Part ///////////////////////////
weapon_check local.player:
wait 0.6
if(local.player != NULL && local.player != NIL && isAlive(local.player) && local.player.dmteam != spectator && !local.player.checked)
{
local.player iprint "Start Check"
local.player weaponcommand dual targetname ("weap" + local.player.entnum )
local.player.weapon = $("weap" + local.player.entnum ).model
if(local.player.weapon != NIL && local.player.weapon != NULL)
{
for (local.i = 1; local.i <= level.notallowed.size; local.i++)
{
if(local.player.weapon == level.notallowed[local.i])
{
local.player take level.notallowed[local.i]
local.player iprint "Not Allowed"
if(getcvar(pe_weapon_choice) != "1")
{
local.player give models/weapons/KAR98sniper.tik
local.player use models/weapons/KAR98sniper.tik
local.player primarydmweapon sniper
}
if(getcvar(pe_weapon_choice) == "1")
{
local.player spectator
local.player stufftext "pushmenu SelectPrimaryWeapon"
}
if(getcvar(pe_weapon_message) == "1")
{
local.player iprint ("The Weapon you chose is unavailable") 1
local.player iprint (level.allowed) 1
//local.player iprint ("So here is a Sniper") 1
}
}
local.player.checked = 1
}
}
local.player iprint "End Check"
}
wait 0.5
local.player.checked = 0
end
////////////////////////////////////////////////////////////
////////////// Weapon Swap Part ///////////////////////////
weapon_swap local.player:
if (getcvar(pe_weapon_swap) == "1")
{
if(local.player && isAlive(local.player) && local.player.dmteam == "allies")
{
local.player iprint "Swap Start"
local.player weaponcommand dual targetname ("weap" + local.player.entnum )
local.player.weapon = $("weap" + local.player.entnum ).model
switch(local.player.weapon)
{
case "models/weapons/springfield.tik":
local.take = "models/weapons/springfield.tik"
local.takename = "Springfield"
local.give = "models/weapons/KAR98sniper.tik"
local.givename = "Kar98Sniper"
break
case "models/weapons/m1_garand.tik":
local.take = "models/weapons/m1_garand.tik"
local.takename = " M1 Garand"
local.give = "models/weapons/kar98.tik"
local.givename = "Mausar kar98"
break
default:
end
}
wait 1
if(local.player && isAlive(local.player) && local.player.dmteam != "spectator")
{
if(local.player.swap == "1")
{
local.player take local.take
local.player take rifle
local.player give local.give
local.player iprint (local.takename + " has been swapped for " + local.givename) 1
local.player use local.give
local.player iprint ("Hold 'Use' again to change back") 1
local.wait = 3.0
while(local.player.useheld && 0.0 < local.wait) {
wait 0.25
local.wait -= 0.25
}
if (local.wait <= 0.0) {
local.player take local.give
local.player take rifle
local.player give local.take
local.player use local.take
local.player.swap = "0"
}
} else {
local.player iprint ("Hold 'Use' for 3 Seconds to change") 1
wait 1
local.wait = 2.0
while(local.player.useheld && 0.0 < local.wait) {
wait 0.25
local.wait -= 0.25
}
if (local.wait <= 0.0) {
local.player take local.take
local.player take rifle
local.player give local.give
local.player iprint (local.takename + " has been swapped for " + local.givename) 1
local.player use local.give
local.player.swap = "1"
}
}
local.player iprint "Swap End"
}
}
}
wait 0.5
end
get_cvars:
//////////////////////////////
level.notallowed[1] = ""
level.notallowed[2] = ""
level.notallowed[3] = ""
level.notallowed[4] = ""
level.notallowed[5] = ""
level.notallowed[6] = ""
level.notallowed[7] = ""
level.notallowed[8] = ""
level.notallowed[9] = ""
level.notallowed[10] = ""
level.notallowed[11] = ""
//////////////////////////////////////////////////////////////
////////////////////// Get Cvars ////////////////////////////
if(getcvar(PE_mg) == "0")
{
level.notallowed[1] = "models/weapons/bar.tik"
level.notallowed[2] = "models/weapons/mp44.tik"
}
if(getcvar(PE_rocket) == "0")
{
level.notallowed[3] = "models/weapons/bazooka.tik"
level.notallowed[4] = "models/weapons/panzerschreck.tik"
}
if(getcvar(PE_shotgun) == "0")
{
level.notallowed[5] = "models/weapons/shotgun.tik"
}
if(getcvar(PE_rifle) == "0")
{
level.notallowed[6] = "models/weapons/m1_garand.tik"
level.notallowed[7] = "models/weapons/kar98.tik"
}
if(getcvar(PE_sniper) == "0")
{
level.notallowed[8] = "models/weapons/springfield.tik"
level.notallowed[9] = "models/weapons/KAR98sniper.tik"
}
if(getcvar(PE_smg) == "0")
{
level.notallowed[10] = "models/weapons/thompsonsmg.tik"
level.notallowed[11] = "models/weapons/mp40.tik"
}
if(getcvar(PE_pistol) == "0")
{
level.player take "models/weapons/colt45.tik"
level.player take "models/weapons/p38.tik"
}
if(getcvar(PE_grenade) == "0")
{
level.player take "models/weapons/m2frag_grenade.tik"
level.player take "models/weapons/steilhandgranate.tik"
}
end
/////////////////////////////////////////////////////////////
/////////////////////// Message Part /////////////////////////
weapon_message:
level.allowed = "Allowed Weapons:"
if (getcvar(pe_allweapons) == "1")
level.allowed += " All Weapons "
else
{
if (getcvar(pe_pistol) == "1")
level.allowed += " Pistol,"
if (getcvar(pe_rifle) == "1")
level.allowed += " Rifle,"
if (getcvar(pe_sniper) == "1")
level.allowed += " Sniper,"
if (getcvar(pe_smg) == "1")
level.allowed += " SMG,"
if (getcvar(pe_mg) == "1")
level.allowed += " MG,"
if (getcvar(pe_grenade) == "1")
level.allowed += " Grenades,"
if (getcvar(pe_shotgun) == "1")
level.allowed += " Shotgun,"
if (getcvar(pe_rocket) == "1")
level.allowed += " Rocket,"
}
end